package com.liu.service.impl;

import com.github.pagehelper.PageHelper;

import com.liu.dao.UserMapper;
import com.liu.model.User;

import com.liu.service.UserService;

import com.liu.tools.EncryptUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * Created by liu on 2018/3/26.
 */
@Service(value = "userService")
public class UserServiceImpl implements UserService{

    @Resource
    UserMapper userDao;

    @Override
    public Boolean add(User user) {
        user.setCreateDate(new Date());

        Boolean flag = userDao.save(user);
        return flag;
    }

    @Override
    public Boolean edit(User user) {
        user.setPassword(EncryptUtil.string2SHA256(user.getPassword()));
        Boolean flag = userDao.edit(user);
        return flag;
    }

    @Override
    public Boolean deleteById(String id) {
        Boolean flag = userDao.deleteById(id);
        return flag;
    }

    @Override
    public User findById(String id) {
        return userDao.findById(id);
    }

    /*
   * 这个方法中用到了我们开头配置依赖的分页插件pagehelper
   * 很简单，只需要在service层传入参数，然后将参数传递给一个插件的一个静态方法即可；
   * pageNum 开始页数
   * pageSize 每页显示的数据条数
   * */
    @Override
    public List<User> findAll(int pageNum, int pageSize, Map<String, Object> queryMap) {
        //将参数传给这个方法就可以实现物理分页了，非常简单。
        PageHelper.startPage(pageNum, pageSize);
        List<User> list = userDao.findAll(queryMap);

        return list;
    }

    @Override
    public User login(User user) {
        //使用SHA-256 方式对密码进行加密
        user.setPassword(EncryptUtil.string2SHA256(user.getPassword()));

        List<User> users = userDao.login(user);
        if(users.isEmpty() || users.size() > 1) {
            return null;
        }
        return users.get(0);
    }
}
